# import tensorflow as tf
# # 此处代码需要使用 tf 2 版本运行
# # 1.创建输入张量，并赋初始值
# a = tf.constant(2.)
# b = tf.constant(4.)
#
# print(a+b)

#
# import tensorflow as tf
# # 创建 4 个张量，并赋值
# a = tf.constant(1.)
# b = tf.constant(2.)
# c = tf.constant(3.)
# w = tf.constant(4.)
# with tf.GradientTape() as tape:# 构建梯度环境
#     tape.watch([w]) # 将 w 加入梯度跟踪列表
# # 构建计算过程，函数表达式
# y = a * w**2 + b * w + c # 自动求导
# [dy_dw] = tape.gradient(y, [w])
# print('res',dy_dw) # 打印出导数


import os
import tensorflow as tf # 导入 TF 库
from tensorflow import keras # 导入 TF 子库 keras
from tensorflow.keras import layers, optimizers, datasets # 导入 TF 子库等
(x, y), (x_val, y_val) = datasets.mnist.load_data() # 加载 MNIST 数据集
x = 2*tf.convert_to_tensor(x, dtype=tf.float32)/255.-1 # 转换为浮点张量，并缩放到 -1~1
y = tf.convert_to_tensor(y, dtype=tf.int32) # 转换为整形张量
y = tf.one_hot(y, depth=10) # one-hot 编码
print(x.shape, y.shape)
train_dataset = tf.data.Dataset.from_tensor_slices((x, y)) # 构建数据集对象
train_dataset = train_dataset.batch(512) # 批量训练


